package top.ruanlitao.shortlink.admin.common.serialize;

import cn.hutool.core.util.DesensitizedUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 手机号脱敏反序列化器
 */
public class PhoneDesensitizationSerializer extends JsonSerializer<String> {

    /**
     * 自定义序列化
     * @param phone 需要序列化的手机号
     * @param jsonGenerator Jackson 提供的 JSON 生成器，用于生成 JSON 输出
     * @param serializerProvider 提供序列化过程中所需的上下文信息，通常用不到
     * @throws IOException 序列化过程可能会出现IO异常
     */
    @Override
    public void serialize(String phone, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        // 通过 hutool 工具类将手机号脱敏为 138****1234，隐藏了中间 4 位数字
        String phoneDesensitization = DesensitizedUtil.mobilePhone(phone);
        // 将脱敏后的手机号写入 JSON 输出
        jsonGenerator.writeString(phoneDesensitization);
    }
}